// pages/auth/login/login.js
const app = getApp()

Page({
  data: {
    isLoading: false,
    showNicknameInput: false,
    customNickname: '',
    wxUserInfo: null,
    wxCode: null,
    inputMethod: 'custom', // 输入方式：custom-自定义输入，preset-预设选择
    presetNicknames: ['妈妈', '爸爸', '爷爷', '奶奶', '哥哥', '姐姐', '弟弟', '妹妹']
  },

  onLoad() {
    // 检查是否已经登录
    if (app.globalData.isLoggedIn) {
      this.redirectToMain()
    }
  },

  // 处理合并后的登录
  handleMergedLogin() {
    if (!this.data.customNickname || this.data.customNickname.length < 2) {
      wx.showToast({
        title: '昵称至少2个字符',
        icon: 'none'
      })
      return
    }

    this.setData({ isLoading: true })
    
    // 直接获取微信用户信息并登录
    this.getUserInfoAndLogin()
  },

  // 处理登录
  handleLogin() {
    this.setData({ isLoading: true })
    
    // 先获取微信用户信息，然后显示昵称输入
    this.getUserInfoAndLogin()
  },

  // 获取用户信息并登录
  getUserInfoAndLogin() {
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        const userInfo = res.userInfo
        
        // 保存微信用户信息
        this.setData({
          wxUserInfo: userInfo
        })
        
        // 自动进行微信登录获取code
        this.wxLogin(userInfo)
      },
      fail: (err) => {
        console.log('获取用户信息失败', err)
        if (err.errMsg.includes('getUserProfile:fail auth deny')) {
          wx.showModal({
            title: '需要授权',
            content: '为了提供更好的服务，需要获取您的头像和昵称信息',
            confirmText: '重新授权',
            cancelText: '取消',
            success: (res) => {
              if (res.confirm) {
                // 用户点击重新授权，再次调用
                this.getUserInfoAndLogin()
              } else {
                this.setData({ isLoading: false })
              }
            }
          })
        } else {
          wx.showToast({
            title: '获取用户信息失败',
            icon: 'none'
          })
          this.setData({ isLoading: false })
        }
      }
    })
  },

  // 微信登录
  wxLogin(userInfo) {
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log('微信登录成功，code:', res.code)
          // 保存微信登录code，直接创建用户
          this.setData({ wxCode: res.code })
          
          // 直接创建用户并登录
          this.createUserAndLogin(userInfo, res.code)
        } else {
          console.log('微信登录失败:', res.errMsg)
          wx.showToast({
            title: '微信登录失败',
            icon: 'none'
          })
          this.setData({ isLoading: false })
        }
      },
      fail: (err) => {
        console.log('微信登录失败:', err)
        wx.showToast({
          title: '微信登录失败',
          icon: 'none'
        })
        this.setData({ isLoading: false })
      }
    })
  },

  // 创建用户并登录
  async createUserAndLogin(userInfo, wxCode) {
    try {
      // 动态引入云服务
      const { userService, familyService, dishService } = require('../../../utils/cloud.js')
      
      // 通过云函数获取真实的openid
      const openidResult = await wx.cloud.callFunction({
        name: 'getOpenId'
      })
      
      if (!openidResult.result || !openidResult.result.openid) {
        throw new Error('获取openid失败')
      }
      
      const openid = openidResult.result.openid
      
      // 检查用户是否已存在
      const existingUser = await userService.getUserByOpenid(openid)
      
      let user
      if (existingUser.success && existingUser.data) {
        // 用户已存在，更新信息
        const updateResult = await userService.updateUser(existingUser.data._id, {
          nickname: this.data.customNickname, // 使用自定义昵称
          avatar: userInfo.avatarUrl,
          lastLoginTime: new Date().toLocaleString()
        })
        
        if (updateResult.success) {
          user = { ...existingUser.data, ...updateResult.data }
          console.log('现有用户登录成功，保持原有角色:', user.role)
        } else {
          throw new Error('更新用户信息失败')
        }
      } else {
        // 创建新用户，使用固定的家庭ID
        const familyId = 'xiaoweichufang'
        
        // 检查家庭是否已存在
        let family
        const existingFamily = await familyService.getFamilyById(familyId)
        
        if (existingFamily.success && existingFamily.data) {
          // 家庭已存在，使用现有家庭
          family = existingFamily.data
          console.log('使用现有家庭:', family)
        } else {
          // 家庭不存在，创建新家庭
          const familyData = {
            _id: familyId, // 使用固定ID
            name: '榕城会馆',
            inviteCode: 'XWC2024',
            adminId: null, // 先设为null，创建用户后再设置
            members: [],
            createTime: new Date().toLocaleString()
          }
          
          const familyResult = await familyService.createFamily(familyData)
          if (!familyResult.success) {
            throw new Error('创建家庭失败')
          }
          
          family = familyResult.data
          console.log('创建新家庭成功:', family)
        }
        
        // 创建用户 - 所有新用户默认为普通成员
        // 管理员角色已在云数据库中设置，无需在此判断
        const userData = {
          openid: openid,
          wxCode: wxCode,
          nickname: this.data.customNickname, // 使用自定义昵称
          avatar: userInfo.avatarUrl,
          familyId: familyId, // 使用固定家庭ID
          role: 'member', // 所有新用户默认为成员
          points: 100, // 默认积分100
          permissions: ['view_dishes', 'add_to_cart', 'view_orders', 'view_profile'], // 成员权限
          createTime: new Date().toLocaleString(),
          lastLoginTime: new Date().toLocaleString()
        }
        
        const createResult = await userService.createUser(userData)
        if (createResult.success) {
          user = { ...userData, _id: createResult.data._id }
          console.log('新用户创建成功，角色为成员:', user._id)
        } else {
          throw new Error('创建用户失败')
        }
        
        // 创建默认服务
        // await this.initializeFamilyData(familyId)
        
        // 保存家庭信息到全局数据
        app.globalData.familyInfo = family
      }

      // 完成登录
      this.completeLogin(user, app.globalData.familyInfo, user.role)
      
    } catch (error) {
      console.error('创建用户失败:', error)
      wx.showToast({
        title: '用户信息处理失败',
        icon: 'none'
      })
      this.setData({ isLoading: false })
    }
  },

  // 昵称输入处理
  onNicknameInput(e) {
    console.log('昵称输入:', e.detail.value)
    this.setData({
      customNickname: e.detail.value
    })
  },

  // 昵称输入框失焦处理
  onNicknameBlur(e) {
    console.log('昵称输入框失焦:', e.detail.value)
    // 确保输入的值被保存
    if (e.detail.value) {
      this.setData({
        customNickname: e.detail.value
      })
    }
  },

  // 切换输入方式
  switchInputMethod(e) {
    const method = e.currentTarget.dataset.method
    this.setData({ inputMethod: method })
    console.log('切换到输入方式:', method)
  },

  // 预设昵称选择
  onPresetNicknameChange(e) {
    const index = e.detail.value
    const nickname = this.data.presetNicknames[index]
    this.setData({ customNickname: nickname })
    console.log('选择预设昵称:', nickname)
  },

  // 确认昵称
  async confirmNickname() {
    if (!this.data.customNickname || this.data.customNickname.length < 2) {
      wx.showToast({
        title: '昵称至少2个字符',
        icon: 'none'
      })
      return
    }

    this.setData({ isLoading: true })
    
    try {
      // 使用保存的微信用户信息和code创建用户
      await this.createUserAndLogin(this.data.wxUserInfo, this.data.wxCode)
    } catch (error) {
      console.error('确认昵称后创建用户失败:', error)
      this.setData({ isLoading: false })
      wx.showToast({
        title: '创建用户失败',
        icon: 'none'
      })
    }
  },

  // 初始化家庭数据（创建默认服务）
  async initializeFamilyData(familyId) {
    try {
      const { dishService } = require('../../../utils/cloud.js')
      
      const result = await dishService.createDefaultDishes(familyId)
      if (result.success) {
        console.log('默认服务创建成功')
      } else {
        console.error('默认服务创建失败')
      }
    } catch (error) {
      console.error('初始化家庭数据失败:', error)
    }
  },

  // 预加载用户数据
  async preloadUserData() {
    try {
      // 预加载服务数据
      await app.loadDishesFromCloud()
      
      // 预加载订单数据
      await app.loadOrdersFromCloud()
      
      // 预加载用户积分
      await app.loadUserPointsFromCloud()
      
      console.log('用户数据预加载完成')
    } catch (error) {
      console.error('预加载用户数据失败:', error)
      // 不抛出错误，让登录流程继续
    }
  },

  // 完成登录
  async completeLogin(user, familyInfo, role) {
    try {
      // 保存用户信息到全局数据
      app.globalData.userInfo = user
      app.globalData.userRole = role
      app.globalData.isLoggedIn = true
      app.globalData.familyInfo = familyInfo

      // 保存到本地存储
      wx.setStorageSync('userInfo', user)
      wx.setStorageSync('userRole', role)
      wx.setStorageSync('isLoggedIn', true)
      wx.setStorageSync('familyInfo', familyInfo)

      // 显示成功提示
      wx.showToast({
        title: '欢迎进入榕城会馆呀！',
        icon: 'success'
      })

      // 预加载用户数据
      await this.preloadUserData()

      // 跳转到主页面
      setTimeout(() => {
        this.redirectToMain()
      }, 1000)
    } catch (error) {
      console.error('完成登录失败:', error)
      wx.showToast({
        title: '登录完成，但数据加载失败',
        icon: 'none'
      })
      
      // 即使数据加载失败，也跳转到主页面
      setTimeout(() => {
        this.redirectToMain()
      }, 1000)
    }
  },

  // 根据角色获取权限
  getPermissionsByRole(role) {
    const permissions = {
      member: ['view_dishes', 'add_to_cart', 'view_orders', 'view_profile'],
      chef: ['view_dishes', 'add_to_cart', 'view_orders', 'view_profile', 'manage_dishes', 'manage_orders', 'manage_members', 'manage_family']
    }
    return permissions[role] || []
  },

  // 跳转到主页面
  redirectToMain() {
    // 所有用户都跳转到用户主页面，厨师可以在个人中心选择进入厨师工作台
    wx.reLaunch({
      url: '/pages/index/index'
    })
  },

  // 生成邀请码
  generateInviteCode() {
    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    let result = ''
    for (let i = 0; i < 8; i++) {
      result += chars.charAt(Math.floor(Math.random() * chars.length))
    }
    return result
  }
}) 